package com.xj.algorithm.leetcode;


import java.util.HashMap;
import java.util.Map;

/**
 * 单词规律
 */
public class L290_判断字符串中的单词是否满足给定的规律 {

    /**
     * 给定一种规律 pattern 和一个字符串 str ，判断 str 是否遵循相同的规律。
     *
     * 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
     *
     * 示例1:
     *
     * 输入: pattern = "abba", str = "dog cat cat dog"
     * 输出: true
     * 示例 2:
     *
     * 输入:pattern = "abba", str = "dog cat cat fish"
     * 输出: false
     * 示例 3:
     *
     * 输入: pattern = "aaaa", str = "dog cat cat dog"
     * 输出: false
     * 示例 4:
     *
     * 输入: pattern = "abba", str = "dog dog dog dog"
     * 输出: false
     * 说明:
     * 你可以假设 pattern 只包含小写字母， str 包含了由单个空格分隔的小写字母。   
     */

    public static void main(String[] args) {
        System.out.println(wordPattern("abba","dog cat cat dog"));
        System.out.println(wordPattern("abba","dog cat cat fish"));
        System.out.println(wordPattern("aaaa","dog cat cat dog"));
        System.out.println(wordPattern("abba","dog dog dog dog"));
    }

    //自己的解法：哈希表
    public static boolean wordPattern(String pattern, String str) {
        Map<Character,String> frontMap=new HashMap<>();
        Map<String,Character> backMap=new HashMap<>();

        char[] patternArr=pattern.toCharArray();
        int len1=pattern.length();
        String[] strArr=str.split(" ");
        int len2=strArr.length;
        if(len1!=len2){
            return false;
        }

        for (int i=0;i<len1;i++){
            char c=patternArr[i];
            String val=strArr[i];

            if( frontMap.containsKey(c) ){
                if(!frontMap.get(c).equals(val)){
                    return false;
                }
                continue;
            }

            if(!frontMap.containsKey(c) && backMap.containsKey(val)){
                return false;
            }

            if(!frontMap.containsKey(c) && !backMap.containsKey(val)){
                frontMap.put(c,val);
                backMap.put(val,c);
            }
        }

        return true;
    }
}